/*
题目链接：https://leetcode.cn/problems/koko-eating-bananas/description/
题目：875.爱吃香蕉的珂珂
提交时间：2024.9.16
二分，最小速度
*/

class Solution {
public:
    int minEatingSpeed(vector<int>& piles, int h) {
        sort(piles.begin(),piles.end());
        auto check=[&](long long m) -> bool{
            long long sum=0;
            for(auto x:piles){
                sum+=(x/m);
                if(x%m!=0) sum+=1;
                //sum+=(x+m-1)/m;
            }
            return sum<=h;         //注意不是sum>=h，理解题意:当吃掉所有的香蕉的时间小于规定时间，则速度可以再小
        };
        long long l=1;            //下界，至少吃1根
        long long r=piles[piles.size()-1];   //上界，最多
        while(l<r){
            long long mid=l+(r-l)/2;
            if(check(mid)) r=mid;
            else l=mid+1;
        } 
        return r;
    }
};